/*
/*
 * @param {Object} options配置信息
 *  key:唯一的id
 * 	datas:需要展示的数据的数组 例[{ID:'SPID003',Name:'康师傅'}]
 * pageVO : 对应java中的pagevo 的js对象
 * columns:需要展示的数据的列  例 [{field:'ID', title:'商品编号'},{field:'Name', title:'名称'}]
 * 数据和列名必须以上面的格式统一
 *
 * pageIndex:当前页数
 * pageSize:每页的数据条数
 * node:需要将表格添加到哪个节点 例：（"#table"）
 * isEdit:是否有详情和编辑按钮 Boolean值
 * click:点击了行触发的方法 clickNode是当前的tr 入库点击了全选则传的是全选框是否被选中 true 或者false 但是所有的tr节点会在tempDate ,columns 是列的数组, tempDate 一个对象里面储存了你点击的所有的tr节点,datas 是传入进来的数据源
 * isChecked:是否需要复选框 默认是true
 * isNumber : 是否显示编号

 * fontAwesome: 编辑的字体图标 例{ 'fa fa-pencil':'修改' , 'fa  fa-bars':'详情' }(这是默认的，不写这属性就是它)
 * fontAwesomeClick:对应上面字体图标点击时触发的方法（必须按照格式写）例:
 * {'修改': function(event,obj,node,parent){},'详情': function(){}} 这里的'修改'是对应上面的点击title
 * 给你了四个参数第一个是：event对象,第二个是当前行的对象,第三个是当前点击的标签,第四个是当前点击的tr,第五个是传入进来的数据源
 * pages :分页需要的 ，总共的页数，这里可以直接放在pageVO里
 * pageIndex : 当前页数 ，这里可以直接放在pageVO里
 * pageURL : 点击分页的访问链接 ，这里可以直接放在pageVO里
 *  clickPageBefore: 点击了翻译在表格刷新前执行的方法,第一个参数是options 第二是ajax请求过来的jsonresult
 *  clickPage :点击了翻页后在表格刷新后执行的方法,给了你options 和回调函数
 * callBack: 插入表格后执行的回调函数，为了解决表格需要执行的外部js 也就是导包操作 例: eval(    <script src="${pageContext.request.contextPath}/app-assets/js/customizer.js" type="text/javascript"></script>)
 * isPaging:是否显示分页
 */
function firstTable(options){
    options = options || {}

    let pageVO = options['pageVO'] || {pageSize:-1000,selectObj:undefined};
    let isPaging = options["isPaging"];
    if(isPaging == undefined){
        isPaging = true;
    }
    //每行展示的最大数据条数
    let pageSize = options["pageSize"] ||  pageVO['pageSize'];

    let callBack = options["callBack"] || function(){}

    let clickPage = options['clickPage'] ||function () {};
    let fontAwesome = options['fontAwesome'] || {  'ft-user font-medium-3 mr-2':'详情' , 'ft-edit-2 font-medium-3 mr-2':'编辑' };
    //这里是点击后面的图标触发的对应的方法
    //定义图标默认点击方法
    let defaultClick = {};
    //储存查询的对象
    let selectObj = pageVO['selectObj'];
    for (let i in fontAwesome) {

        defaultClick[fontAwesome[i]] = function(){};
    }

    let fontAwesomeClick = options['fontAwesomeClick'] ||defaultClick;
    let key =options['key'];
    let isChecked = options['isChecked'];
    if(isChecked == undefined){
        isChecked = true;
    }
    //datas 需要展示的数据
    let datas =   pageVO.data|| options['datas'] ;

    //columns 需要展示的列
    let columns = options['columns'] || [];

    //将生成table添加到那个div里（这里传入的是选择器名称）
    let node = options['node'] || '';
    //确定分页的唯一性
    let clickPageBefore = options["clickPageBefore"];

    let isEdit = options['isEdit'];
    let click = options['click'] || function(){};
    let isNumber = options['isNumber'];
    //临时储存已选中的数据字典

    let tempData = {}//创建对象


    //绘制table下的tbody函数

    if(!isPaging || pageSize == -1000){
        pageSize = datas.length;
    }


    let drawTable = function(start ,tables){

        //循环拼接tbody
        tables = tables || ``;

        for (let i= 0;i<pageSize;i++) {
            if(!datas){
                break;
            }
            let data = datas[i];

            if(!data){
                continue;
            }
            tables += `<tr data-key="${data[key]}" data-id="${i+1}">`;
            if(isChecked){

                tables+=`
												  <td>
												  <div id="xuanzhong">
													<div class="custom-control custom-checkbox m-0">
													  <input type="checkbox" class="custom-control-input" id="item${i}">
													  <label class="custom-control-label" for="item${i}"></label>
													</div>
												<div>
												  </td>
													`
            }
            if(isNumber){


                tables+=`<td id='bianhao'>${(i % pageSize) +1}</td>`
            }

            for(let j in columns){

                let row = columns[j].field;

                if(parseInt(data[row]) == 0){

                    tables+=`<td>0</td>`;
                }else {
                    tables += `<td>${data[row] || ''}</td>`;

                }
            }
            if(isEdit){
                tables+='<td>';
                for (let i in fontAwesome) {
                    tables += `<a class="info p-0" data-original-title="" title="${fontAwesome[i]}">
								    
								    
								      <i class="${i} mr-2"></i>
								    </a>`
                }



                tables += '</td>';

            }


            tables+="</tr>";

        }
        tables+="</tbody>"
        return tables;
    };
    //初始化table信息
    let tables = `<div class="card">     
					<div class="card-content">
					<div class="card-body table-responsive">
					<table class="table table-hover text-center">
						<thead>
						<tr>`;
    if(isChecked){
        tables +=` <td>
							<div id="quanxuan">
							<div class="custom-control custom-checkbox m-0">
							<input type="checkbox" class="custom-control-input" id="">
							<label class="custom-control-label" for="item" style="font-weight:1000;"></label>
							</div>
							</div>
						  </td>`;
    }
    if(isNumber){
        tables+=`<th>编号</th>`;
    }



    //循环遍历添加列名

    for(let i = 0;i<columns.length;i++){

        let cloum = columns[i];
        if(i == 0){
            if(!key ){
                key = cloum.field;

            }
        }

        tables+=`<th>${cloum.title || cloum.field}</th>`;
    }
    if(isEdit){
        tables+='<th>操作</th></tr>'
    }

    tables+='</thead><tbody>';

    tables = drawTable(null,tables);

    tables+='</table>';
    $(node).html(tables);


    //添加分页
    if(isPaging){
        addPage(options);
    }
    let table = $(node).find('table');


    //绑定监听事件
    if(isChecked){
        table.on('click',function(event){
            event.stopPropagation();
            //获取点击的标签
            let target = event.target;

            //判断是否是th
            if(target.nodeName === 'TH'){
                return;
            }else if(target.nodeName === 'I'){//判断是否是i标签
                let $parent = $(target).parent();
                let titleName = $parent.attr('title');
                //获取点击的tr节点
                while($parent[0].nodeName !== 'TR'){
                    $parent = $parent.parent();
                }

                //得到当前点击的对象
                let obj =  getObj($parent[0],columns,isEdit,isChecked,isEdit);
                //调用点击对应的方法
                fontAwesomeClick[titleName](event,obj,target,$parent[0],datas);


                return;
            }else if(target.nodeName === 'LABEL'||target.nodeName === 'INPUT'){//判断是否是点击了输入框
                //判断是否点击了全选
                //获取到td

                let td = target.parentNode;

                while(td.nodeName !== 'TD'){
                    td = td.parentNode;
                }

                if($(td).find("div")[0].id === 'xuanzhong'){



                    //获取该节点的tr父节点

                    let parent = target.parentNode;
                    while(parent.nodeName !== 'TR'){
                        parent = parent.parentNode;
                    }

                    //获取父节点里的input
                    let $child =  $(parent).find('input[type="checkbox"]')[0];
                    $child.checked ? $child.checked = false : $child.checked = true;

                    let item = $(parent).data('id');

                    //判断临时数据是否有该节点
                    if(tempData[`${item}`]){
                        tempData[`${item}`] = undefined;
                    }else{
                        tempData[`${item}`] = parent;
                    }

                    //判断是否所有的复选框都选中
                    let isAll = true;
                    $(this).find('tbody').find('tr').each(function(index,ele){
                        if(!$(ele).find('input[type="checkbox"]')[0].checked){

                            isAll = false;
                            return false;
                        }
                    })
                    if(isAll){

                        $(this).find('thead').find('input')[0].checked = true;
                    }else{


                        $(this).find('thead').find('input')[0].checked = false;



                    }

                    //调用自定义选中方法

                    click(parent,columns,tempData,datas);




                    return;
                }
                //找到td下的input
                let $input = $(td).find('input');

                $input[0].checked ?  $input[0].checked = false :  $input[0].checked = true


                //判断全选是否被选中
                let isAllChicked = $input[0].checked;

                //获取tbody节点
                $(this).find('tbody').find('tr').each(function(index,ele){

                    //获取每个input
                    let $check =  $(ele).find('input[type="checkbox"]')[0];
                    isAllChicked ? $check.checked =true :  $check.checked =false;

                });
                //将当前页面的input加到选中的数组里
                //如果全选按钮被选中
                if(isAllChicked){

                    //将当前页面所有的tr都加入选中的数组中
                    $(this).find("tbody").find("tr").each(function(index,ele){

                        let item = $(ele).data('id');


                        if(!tempData[`${item}`]){

                            tempData[`${item}`] = ele;

                        }


                    });



                }

                click(isAllChicked.toString(),columns,tempData);


            }else if(target.nodeName === 'TD'){

                //获取该节点的tr父节点

                let parent = target.parentNode;
                while(parent.nodeName !== 'TR'){
                    parent = parent.parentNode;
                }

                //获取父节点里的input
                let $child =  $(parent).find('input[type="checkbox"]')[0];
                $child.checked ? $child.checked = false : $child.checked = true;

                let item = $(parent).data('id');

                //判断临时数据是否有该节点
                if(tempData[`${item}`]){
                    tempData[`${item}`] = undefined;
                }else{
                    tempData[`${item}`] = parent;
                }

                //判断是否所有的复选框都选中
                let isAll = true;
                $(this).find('tbody').find('tr').each(function(index,ele){
                    if(!$(ele).find('input[type="checkbox"]')[0].checked){

                        isAll = false;
                        return false;
                    }
                })
                if(isAll){

                    $(this).find('thead').find('input')[0].checked = true;
                }else{


                    $(this).find('thead').find('input')[0].checked = false;



                }

                //调用自定义选中方法

                click(parent,columns,tempData);
            }
        });
    }

    //执行回调函数

    callBack(options,$(node));
}

/**
 * @param {Object} options配置信息
 *  key:唯一的id
 * 	datas:需要展示的数据的数组
 * columns:需要展示的数据的列
 * pageVO : 对应java中的pagevo 的js对象
 * node:需要将表格添加到哪个节点 例：（#table）
 * priceEdit : 需要把点击增减的图标放在哪列 例('SPJG') SPJG是列名商品价格的field的字符
 * deleteFun ： 点击删除按钮执行的方法
 * edit :行内编辑的列 传入数组 例 ['SP','SL']
 * clickFun 点击时触发的方法  给了event和当前点击tr
 *  loseFocus行内编辑焦点失去后调用的方法 （给了你event,和当前点击的tr）
 *  * pageIndex:当前页数
 * pageSize:每页的数据条数
 * onceChange每次点击+ - 的数量
 * imgRow:放置图片的列名
 * fontAwesome编辑的字体图标 例{ 'ft-trash font-medium-3':'删除' }(这是默认的，不写这属性就是它)
 */

function secondTable(options,succe){
    options = options || {}
    let key = options['key'];
    let loseFocus = options['loseFocus'] || function(event,tr){

    };
    let pageVO = options["pageVO"];
    if(!pageVO){
        throw  new Error("缺少重要参数pageVO");
    }
    let imgRow = options['imgRow'];
    let isRowEdit =  options['edit']  || [];
    let fontAwesome = options['fontAwesome'] ||{'ft-trash font-medium-3':'删除'};
    let success = succe || function(){};
    let pages = options['pageVO']['pages']|| options['pages']  ;
    let pageIndex =   options['pageVO']['pageIndex']||options["pageIndex"] ;
    let pageURL = options['pageVO']['pageURL'] || options['pageURL'] ;
    //每行展示的最大数据条数
    let pageSize = options["pageSize"] ||  options['pageVO']['pageSize'];
    //datas 需要展示的数据
    let datas = options['datas'] || pageVO.data;
    //columns 需要展示的列
    let columns = options['columns'] || [];
    //将生成table添加到那个div里（这里传入的是选择器名称）
    let node = options['node'] || '';
    let page = node.substring(1,);
    //修改价格按钮放在哪列
    let priceEdit = options['priceEdit'] || '';

    //点击删除按钮执行的方法
    let deleteFun = options['deleteFun'] || function(tr){

        for (let i = 0; i < datas.length; i++) {
            tr.remove()
        }};
    //每次点击增加或减少多少个
    let onceChange = options['onceChange'] || 1;

    //绘制table下的tbody函数

    let drawTable = function(start ,tables){
        //循环拼接tbody

        tables = tables || ``;

        for (let i= 0;i<pageSize;i++) {
            if(!datas){
                break;
            }
            let data = datas[i];
            if(!data){

                continue;
            }

            tables+=`<tr data-id="${i}">`;
            for(let j in columns){


                let row = columns[j].field;
                let rowName = columns[j].title;
                if(row == imgRow){
                    tables+=`<td> <img alt="${columns[j].title ||''}" class="media-object round-media" src="${data[row]}" ></td>`;
                    continue;
                }



                if(isRowEdit.indexOf(row)>=0 ||isRowEdit.indexOf(rowName)>=0 ){

                    tables+=`<td><span name="price">${data[row] || 0}</span></td>`;

                    continue
                }

                if(row == priceEdit ||rowName == priceEdit){
                    tables+=`<td><span name="num">${data[row] || 0}</span><div class="btn-group ml-1">
												  <a class="btn btn-info px-1 py-1 btn-raised font-medium-5" href="javascript:void(0)">-</a>
												  <a class="btn btn-info px-1 py-1 btn-raised font-medium-5" href="javascript:void(0)">+</a>
												</div></td>`;
                    continue

                }

                tables+=`<td>${data[row] ||""}</td>`;
            }

            tables+=`<td>`;
            for (let i in fontAwesome) {
                tables +=`<a class="danger" data-original-title="" title="${fontAwesome[i]}">
								    <i class="${i}"></i>
								  </a>`
            }
            tables += `	  
				              </td>
				            </tr>
							`;


        }
        return tables;
    };
    //初始化table信息
    let tables = `<div class="card">
        <div class="card-content">
          <div class="card-body">
            <table class="table table-responsive-md text-center table-hover ">
				<thead>
								`;

    //循环遍历添加列名

    for(let i = 0;i<columns.length;i++){
        let cloum = columns[i];
        if(i == 0){
            if(!key){
                key = cloum.field;
            }
        }
        tables+=`<th>${cloum.title || cloum.field}</th>`;
    }
    tables+='<th>操作</th></tr></thead><tbody>';
    //添加数据
    tables = drawTable(null,tables);

    tables+='</table>';

    //添加分页
    tables+='</table>';

    tables+=`<nav aria-label="Page navigation example">
                       
						<ul id='page' class="pagination justify-content-end">
					
						<li class="page-item ">
						
						<a class="page-link" id="firstPage" href=#  tabindex="-1">首页</a>
						</li>
						<li class="page-item ">
						
						<a class="page-link" id="previousPage" href=# tabindex="-1">«
</a>
						</li>`

    let linkStart;
    let linkEnd;

    if(pageIndex ==1&&pages>=5){
        linkStart = 1;
        linkEnd = 5;
    }else if(pageIndex <=2 &&pages>=5){
        linkStart = 1;
        linkEnd = linkStart+4;
    }
    else if(  pages==pageIndex && pages>2){
        linkStart = pages-4;
        linkEnd = pageIndex;
    }else if(pageIndex>1 && pages<=5){
        linkStart = 1;
        linkEnd = pages;
    }else if(pageIndex>2 && pageIndex <= pages-2){
        linkStart = pageIndex-2;
        linkEnd = pageIndex+2;
    }else if(pageIndex>2 && pageIndex > pages-2){
        linkStart = pageIndex -3;
        linkEnd = pages;
    }
    for(let i = linkStart;i<=linkEnd;i++){

        if(pageIndex == i){
            tables+=`<li name="${i}" class="page-item active"><a class="page-link" href=#>${i}</a></li>`

        }else{
            tables+=`<li name="${i}" class="page-item "><a class="page-link" href=#>${i}</a></li>`
        }


    }








    tables +=	`<li class="page-item">
						<a class="page-link" id="nextPage" href=#>»</a>
						</li>
				<li class="page-item">
						<a class="page-link" id="lastPage" href=#>尾页</a>
						</li>
						</ul>
					</nav>`;



    $(node).html(tables);

    //获取table
    let table = $(node).find('table')[0];

    //添加事件
    $(node).find('table > tbody').on('click',function(event){
        //获取当前点击的标签
        let $clickNode = event.target;

        //得到tr节点

        $parentNode = $clickNode.parentNode;

        if($parentNode.nodeName === "TABLE" || $parentNode.nodeName === "TBODY" ){
            return;
        }

        while($parentNode.nodeName !== 'TR'){

            $parentNode = $parentNode.parentNode;
        }
        //得到td节点
        let td = $clickNode;
        while(td.nodeName !== 'TD'){
            td = td.parentNode;
        }


        $($parentNode).find('td').each(function(index,ele){
            if(!ele.firstChild ){
                return;
            }
            let content = ele.firstChild.nodeValue;
            //得出该列
            if($(ele).find('i').length > 0){
                return false;
            }


        });

        //ele.firstChild.nodeValue
        //如果点击的是i标签则调用传入进来的方法
        if($clickNode.nodeName === 'I' ){

            deleteFun($parentNode);
        }
        if($clickNode.nodeName === 'A'){
            //得到它的数量并进行修改
            let span = $(td).find('span');
            let num = span.text();

            //根据传进来的相加

            if($clickNode.firstChild.nodeValue == '+'){

                num = parseInt(num)+parseInt(onceChange) || 0;
                span.text(num)
            }else{
                num = parseInt(num)-parseInt(onceChange) || 0;
                if(num<=0){
                    span.text(0);

                }else{
                    span.text(num);
                }

            }
        }


        //行内编辑
        if(true){




            if($clickNode.nodeName === 'SPAN'){

                //将该标签变为input
                let   $input=$("<input>",{
                    val:$(td).find('span')[0].textContent,
                    type:"text"
                });
                $input.css("width","50px");
                $input.attr('name',`${$($clickNode).attr('name')}`);
                //变为span标签
                let   $span=$("<span>");
                $span.attr('name',`${$($clickNode).attr('name')}`);

                $($clickNode).replaceWith($input);

                //添加失去焦点时的监听
                $input.on('blur',function(event){

                    $span.text($(this).val())

                    loseFocus(event,$parentNode);
                    $(`input[name="${$span.attr('name')}"]`).replaceWith($span);

                })


            }


        }

    });
    //绑定分页点击事件
    $("#page").on('click',function (event) {
        //阻止默认操作
        event.preventDefault();

        //获取当前点击的标签
        let target = event.target;
        //判断点击的是否是a标签
        if(target.nodeName === 'A'){
            //获取到a标签里的链接
            let a =  ``  ;
            //判断是否是上一页和下一页
            if(target.id == "firstPage"){
                a = `${pageURL}?pageIndex=1&pageSize=${pageSize}`;
            }else if(target.id == "previousPage"){
                a =  `${pageURL}?pageIndex=${pageIndex-1}&pageSize=${pageSize}`;
            }else if(target.id == "nextPage"){
                a =  `${pageURL}?pageIndex=${pageIndex+1}&pageSize=${pageSize}`;
            }else if(target.id == "lastPage"){
                a =  `${pageURL}?pageIndex=${pages}&pageSize=${pageSize}`;
            }else{
                let index =   target.text;
                a =  `${pageURL}?pageIndex=${index}&pageSize=${pageSize}`;
            }



            //将该页面加载到当前的node中
            $(node).load(a);

        }




    });
    success($(table));
}




/**
 * 日期函数封装，返回值需要使用eval函数执行一遍
 * Min：选择最小日期
 * MAX：选择最大日期
 *
 *isMiddle：是否启用选择指定日期
 *
 */
function getCalendar(options){

    options = options || {};

    //选择最小日期
    let Min = options['Min'] ;
    //是否启用选择指定日期
    let  isMiddle = options['isMiddle'];
    //选择最大日期
    let Max = options['Max'] ;

    mydata = new Date();
    let nowYear = mydata.getFullYear();
    let nowMoth = mydata.getMonth();

    let nowDay = mydata.getDate();
    let obj = ''
    if(isMiddle){

        if(!Max){
            if(!Min){
                obj =  `{
							weekdaysShort: [ '日','一', '二', '三', '四', '五', '六'],
							firstDay : 1,
							
							today: '今天',
							close: '关闭',
							clear: '清除',
							format : 'yyyy-mm-dd',
							monthsFull: [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ]
						}`
            }else{
                obj =  `{
							weekdaysShort: [ '日','一', '二', '三', '四', '五', '六'],
							firstDay : 1,
							min: [${nowYear},${nowMoth},${Min}],
							today: '今天',
							close: '关闭',
							clear: '清除',
							format : 'yyyy-mm-dd',
							monthsFull: [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ]
						}`
            }

        }else{
            if(!Min){
                obj =  `{
						 	weekdaysShort: [ '日','一', '二', '三', '四', '五', '六'],
						 	firstDay : 1,
						 	today: '今天',
						 	close: '关闭',
						 	clear: '清除',
						 	format : 'yyyy-mm-dd',
						 	max: [${nowYear},${nowMoth},${Max}],
						 	monthsFull: [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ]
						 }`
            }else{
                obj =  `{
						 	weekdaysShort: [ '日','一', '二', '三', '四', '五', '六'],
						 	firstDay : 1,
						 	min: [${nowYear},${nowMoth},${Min}],
						 	max: [${nowYear},${nowMoth},${Max}],
						 	today: '今天',
						 	close: '关闭',
						 	clear: '清除',
						 	format : 'yyyy-mm-dd',
						 	monthsFull: [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ]
						 }`
            }
        }


    }else{
        obj =  `{
					 	weekdaysShort: [ '日','一', '二', '三', '四', '五', '六'],
					 	firstDay : 1,
					 	
					 	today: '今天',
					 	close: '关闭',
					 	clear: '清除',
					 	format : 'yyyy-mm-dd',
					 	monthsFull: [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ]
					 }`
    }


    let content = `$('.pickadate').pickadate(${obj});`

    return content;
}
/**
 * @param {Object} bodyTr 传入转换成对象tr节点
 * @param {Object} headData 传入表头数据（列的数据）
 * isEdit :转换的tr是否有编辑按钮
 * Head:是否去第一个
 * Body :是否去最后一个
 * 后面三个不写则默认有编辑并去除第一个和最后一个
 */

function getObj(bodyTr,headData,isEdit,Head,Body){

    let obj = {};
    if(isEdit == undefined && Body == null && Head == null){

        isEdit = true;
        Head = true;
        Body = true;
    }
    let tr;
    if(isEdit){

        if(Head && Body){
            tr = $(bodyTr).find('td').not(":first").not(":last");

        }else if(!Head && Body){
            tr = $(bodyTr).find('td').not(":last");
        }

    }else{

        tr = $(bodyTr).find('td').not(":first");
    }

    //循环遍历tr数据
    if(!tr){
        return;
    }
    let isNum = false;
    tr.each(function(index,ele){

        if(ele.id == 'bianhao'){
            isNum = true;
            return;
        }

        if($(ele).find("span").length>0){
            if(isNum){

                obj[`${headData[index-1].field}`] = $(ele).find("span").text();
            }else{

                obj[`${headData[index].field}`] = $(ele).find("span").text();
            }

        }else{
            if(isNum){

                obj[`${headData[index-1].field}`] = $(ele).text();

            }else{
                obj[`${headData[index].field}`] = $(ele).text();
            }

        }


    })
    //循环遍历传进来的数据

    return obj;
}



/**
 * @param {Object} isAdd 是否偏移日期
 * @param {Object} i 偏移几天
 */
function getNowtDate(isAdd,i) {//获取当前时间
    var date = new Date();
    var seperator1 = "-";
    var seperator2 = ":";
    var month = date.getMonth() + 1<10? "0"+(date.getMonth() + 1):date.getMonth() + 1;
    var strDate = date.getDate()<10? "0" + date.getDate():date.getDate();
    if(isAdd){
        strDate = date.getDate()<10? "0" + date.getDate()+i:date.getDate()+i;
    }
    var currentdate = date.getFullYear() + seperator1  + month  + seperator1  + strDate
        + " "  + date.getHours()  + seperator2  + date.getMinutes()
        + seperator2 + date.getSeconds();
    return currentdate;
}


function getColumn(obj,parms) {

    let columns = [];
    if(obj != null){
        let name = [];
        for (let o in obj[0]) {
            name.push(o);
        }

        if(name.length != parms.length){
            throw  new Error("传入的列名与对象的列不匹配，不予转换!");
        }else{
            //入库的列
            //生成对应的列对象
            for (let i = 0; i < name.length; i++) {
                let obj = {field:name[i],title:parms[i]};
                columns.push(obj);
            }
        }
    }
    return columns;
}

/**
 * 去除不显示的列名 传入columns 要删除的列名依次写在后面，可以是title 也可以是field
 * @param name
 */
function skip( columns) {

    //循环遍历arguments
    for (let i = 1;i<arguments.length;i++){
        //获得要删除的名字
        let deleteName = arguments[i];
        //循环遍历列名
        for (let j = 0;j<columns.length;j++){
            let column = columns[j];


            if(column.field == deleteName || column.title == deleteName){

                columns.splice(j,1);
                break;
            }
        }
    }

    return columns;
}
function addPage(options) {

    let pageVO =  options['pageVO'];
    let selectObj = pageVO.selectObj;

    let pages = pageVO['pages']|| options['pages']  ;
    let pageIndex =  pageVO['pageIndex']||options["pageIndex"] ;
    let pageURL = pageVO['pageURL'] || options['pageURL'] ;

    //每行展示的最大数据条数
    let pageSize = options["pageSize"] ||  options['pageVO']['pageSize'];
    let tables =``;
    tables += `<nav aria-label="Page navigation example">
                       
						<ul data-tcj='page' class="row pagination justify-content-end align-items-center">
						 <span  style="margin-right: 20px" >共 ${pageVO.total}&nbsp;条<span class="col-auto" style="margin-left: 50px">前往</span>
						 <input class="col-2" data-tcj="skip" style="width: 30px;padding:0 5px">&nbsp;页
						 </span>
						<li class="page-item ">
						
						<a class="page-link" data-tcj="firstPage" href=#  tabindex="-1">首页</a>
						</li>
						<li class="page-item ">
						
						<a class="page-link" data-tcj="previousPage" href=# tabindex="-1">«
</a>
						</li>`;





    let linkStart;
    let linkEnd;


    if (pageIndex == 1 && pages >= 5) {
        linkStart = 1;
        linkEnd = 5;
    } else if (pageIndex <= 2 && pages >= 5) {
        linkStart = 1;
        linkEnd = linkStart + 4;
    } else if (pageIndex <= 2 && pages < 5) {
        linkStart = 1;
        linkEnd = pages;
    }
    else if (pages == pageIndex) {
        if (pages > 5) {
            linkStart = pages - 4;
            linkEnd = pages;
        } else {
            linkStart = pages - pageIndex + 1;
            linkEnd = pageIndex;
        }


    }
    else if (pageIndex > 1 && pages <= 5) {
        linkStart = 1;
        linkEnd = pages;
    } else if (pageIndex > 2 && pageIndex <= pages - 2) {
        linkStart = pageIndex - 2;
        linkEnd = pageIndex + 2;
    } else if (pageIndex > 2 && pageIndex > pages - 2) {
        linkStart = pageIndex - 3;
        linkEnd = pages;
    }

    for (let i = linkStart; i <= linkEnd; i++) {

        if (pageIndex == i) {
            tables += `<li name="${i}" class="page-item active"><a class="page-link" href=#>${i}</a></li>`

        } else {
            tables += `<li name="${i}" class="page-item "><a class="page-link" href=#>${i}</a></li>`
        }


    }


    tables += `<li class="page-item">
						<a class="page-link" data-tcj="nextPage" href=#>»</a>
						</li>
				<li class="page-item">
						<a class="page-link" data-tcj="lastPage" href=#>尾页</a>
						</li>
						</ul>
					</nav>`;
    //判断当前是否是第一页或最后一页
    $(options.node).append(tables);
    if (pageIndex == 1) {


        $('[data-tcj="previousPage"]').closest('li').addClass('disabled ');
        $('[data-tcj="firstPage"]').closest('li').addClass('disabled ');
    }
    if (pageIndex == pages) {
        $('[data-tcj="nextPage"]').closest('li').addClass('disabled ');
        $('[data-tcj="lastPage"]').closest('li').addClass('disabled ');
    }


    //绑定分页点击事件

    $('[data-tcj="page"]').on('click', function (event) {
        //阻止默认操作

        event.preventDefault();

        //获取当前点击的标签
        let target = event.target;
        //判断点击的是否是a标签
        if (target.nodeName === 'A') {
            //获取到a标签里的链接
            let a = ``;
            //判断是否是上一页和下一页

            if ($(target).data('tcj') == "firstPage") {
                a = `${pageURL}?pageIndex=1&pageSize=${pageSize}`;
            } else if ($(target).data('tcj') == "previousPage") {
                a = `${pageURL}?pageIndex=${pageIndex - 1}&pageSize=${pageSize}`;
            } else if ($(target).data('tcj') == "nextPage") {
                a = `${pageURL}?pageIndex=${pageIndex + 1}&pageSize=${pageSize}`;
            } else if ($(target).data('tcj') == "lastPage") {
                a = `${pageURL}?pageIndex=${pages}&pageSize=${pageSize}`;
            } else {
                let index = target.text;
                a = `${pageURL}?pageIndex=${index}&pageSize=${pageSize}`;
            }


            //判断是否有查找的对象

            $.post(a, selectObj, function (e) {
                let newOptions = options;

                newOptions['pageVO'] = e.data;

                if(options.clickPageBefore){

                    newOptions =  options.clickPageBefore(newOptions,e);
                }


                firstTable(newOptions);
                if(options.clickPage){
                    options.clickPage(options,e);
                }

            }, "json");


        }


    });
    //绑定输入跳转页数

    $('[data-tcj="skip"]').on('focus', function (event) {
        $('[data-tcj="skip"]').unbind("click");
        $(document).unbind("keydown");
        //监听键盘回车键
        $(document).keydown(function (event) {

            if (event.keyCode == 13) {

                let pageIndex = $(`${options.node} [data-tcj="skip"]`)[0].value;


                if (pageIndex <= 0) {

                    pageIndex = options.pageVO['pageIndex'];
                }
                if (pageIndex > pages) {
                    pageIndex = options.pageVO['pageIndex'];
                }
                //正则表达式判断是否为纯数字

                if(!/^[0-9]*$/.test(pageIndex)){
                    pageIndex =options.pageVO['pageIndex'];
                }
                let url = pageURL;
                url = url + "?pageIndex=" + pageIndex + "&pageSize=" + pageSize;


                $.post(url, selectObj, function (e) {
                    let newOptions = options;

                    newOptions['pageVO'] = e.data;

                    if(newOptions.clickPageBefore){
                        newOptions = newOptions.clickPageBefore(options,e);
                    }

                    firstTable(newOptions);
                    if(newOptions.clickPage){
                        newOptions.clickPage(options,e);
                    }

                }, "json");


            }
        });
    });

}